package y_2025.m06.d27;

import java.util.Arrays;
import java.util.Scanner;

public class IntervalCoverage {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 输入处理
        int pointCount = scanner.nextInt(); // 点的数量
        int intervalLen = scanner.nextInt(); // 闭区间长度
        
        int[] points = new int[pointCount]; // 存储点的坐标
        
        // 读取所有点的坐标
        for (int i = 0; i < pointCount; i++) {
            points[i] = scanner.nextInt();
        }
        
        // 1. 将所有点按坐标从小到大排序
        Arrays.sort(points);
        
        // 2. 初始化区间计数器
        int intervalCount = 1; // 至少需要一个区间
        
        // 3. 贪心算法：选择区间覆盖点
        int current = 0; // 当前处理的点的索引
        while (current < pointCount) {
            // 3.1 确定当前区间的起点
            int start = points[current];
            
            // 3.2 找到能被当前区间覆盖的所有点
            int next = current; // 下一个未被覆盖的点的索引
            while (next < pointCount && points[next] <= start + intervalLen) {
                next++; // 继续向右扩展，直到点超出当前区间范围
            }
            
            // 3.3 如果已覆盖所有点，结束循环
            if (next >= pointCount) {
                break;
            }
            
            // 3.4 准备新区间：从第一个未被覆盖的点开始
            current = next;
            intervalCount++; // 增加区间计数
        }
        
        // 4. 输出最少区间数
        System.out.println(intervalCount);
    }
}